﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MedindoAFebreI.GeracaoDeTestes.Dominio.Excecoes;

namespace MedindoAFebreI.GeracaoDeTestes.Dominio.Modelos
{
    public class Disciplina
    {
        private static int _count = 0;
        private int _numero;
        private string _nome;

        public int Numero
        {
            get { return _numero; }
            set { _numero = value; }
        }

        public string Nome
        {
            get { return _nome; }
            set { _nome = value; }
        }

        public Disciplina()
        {
            _count++;
            Numero = _count;
        }

        public List<Questao> Questoes = new List<Questao>();

        public void AdicionaQuestao(Questao questao)
        {
            Questoes.Add(questao);
        }

        public Questao BuscaQuestao(int numeroQuestao)
        {
            var questaoEncontrada = Questoes.Where(x => x.Numero == numeroQuestao).First();

            if (questaoEncontrada == null)
            {
                throw new QuestaoNaoEncontradaException(numeroQuestao);
            }

            return questaoEncontrada;
        }

        public int ObtemQuantidadeQuestoes()
        {
            return Questoes.Count(x => x != null);
        }

        public void RemoveQuestao(int numero)
        {
            Questoes.Remove(BuscaQuestao(numero));
        }

        public void EditaQuestao(Questao questao)
        {
            var questaoAtualizada = Questoes.Single(x => x.Numero == questao.Numero);

            questaoAtualizada.Bimestre = questao.Bimestre;
            questaoAtualizada.Enunciado = questao.Enunciado;
            questaoAtualizada.Numero = questao.Numero;
        }

        public override string ToString()
        {
            return string.Format("Disciplina: {0} - Quantidade de questões cadastradas: {1}", Nome, ObtemQuantidadeQuestoes());
        }
    }
}